<template>

</template>

<script>
  import * as u from '@/util/util'

  export default {
    name: "tableMixins",
    data() {
      return {
        //钮权限检查显示方法
        buttonPermissionsCheck: u.buttonPermissionsCheck,
        // 搜索条件
        searchForm: {},
        // 表格加载标志
        tableLoading: false,
        // 表格数据
        tableData: [],
        // 表单数据
        form: {},
        //当前选中
        obj: {},
        // 分页参数
        page: {
          total: 0,  // 总记录数
          currentPage: 1,  // 当前页数
          pageSize: 20,  // 每页显示多少条
          sortdatafield: "create_date",  // 排序字段名
          sortorder: "desc"  // 排序方式 asc/desc
        },
        //新增url
        addUrl: "add",
        //删除url
        delUrl: "delete-by-id",
        //修改
        updateUrl: 'update',
        //查询url
        listUrl: 'findPage',
      }
    },
    methods: {
      /**
       * 移除avue自动生成的$开头的参数
       * @param obj
       */
      del$(obj) {
        let row = u.copyBean(obj);
        for (let key in row) {
          if (key.indexOf("$") == 0) {
            delete row[key];
          }
        }
        return row;
      },


      /**
       * 删除数据中不不在option的参数
       * @param data
       * @param type：add/update
       */
      delNotField(data, type) {
        let row = u.copyBean(data);
        for(let key in row){
          //删除字段不存在的
          if( this.tableOption.column.filter(x=>x.prop==key).length==0){
            //删除字段
            delete row[key];
          }
        }
        //删除不显示的字段
        this.tableOption.column.forEach(x => {
          //删除新增不显示的字段
          if(x.addDisplay==false && type=='add' && x.label != 'ID'){
            delete row[x.prop];
          }
          if(x.editDisplay==false && type == 'update' && x.label != 'ID'){
            delete row[x.prop];
          }
        })
        return row;
      },

      /**
       * 获取id字段
       **/
      getIdField() {
        let field = "id";
        this.tableOption.column.filter(x => {
          if (x.label == 'ID') {
            field = x.prop;
          }
        })
        return field;
      },

      /**
       * 新增保存
       * @param row 行数据
       * @param done 完成回调
       * @param loading 加载回调
       */
      handleSave: function (row, done, loading) {
        u.post("/" + this.url + "/" + this.addUrl, this.delNotField(this.del$(row),"add")).then(res => {
          this.$message.success('新增成功');
          this.getList();
          done();
        })
        loading();
      },


      /**
       * 修改保存
       * @param row 行数据
       * @param index 行索引
       * @param done 完成回调
       * @param loading 加载回调
       */
      handleUpdate: function (row, index, done, loading) {
        u.put("/" + this.url + "/" + this.updateUrl, this.delNotField(row,"update")).then(res => {
          this.$message.success('修改成功');
          this.getList();
          done();
        })
        loading();
      },

      /**
       * 删除
       * @param row 行数据
       * @param index 行索引
       */
      rowDel: function (row) {
        this.$confirm('是否确认删除？', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          u.del("/" + this.url + "/" + this.delUrl + "/" + row[this.getIdField()]).then(res => {
            this.$message.success('删除成功');
            this.getList();
          })
        })
      },

      /**
       * 获取列表数据
       * @param page 分页参数
       * @param params 查询条件
       */
      getList(page, params) {
        this.tableLoading = true;
        let query = Object.assign({}, this.searchForm, this.page);
        u.get("/" + this.url + "/" + this.listUrl, query).then(res => {
          this.tableData = res.records;
          this.page.total = res.total;
          this.tableLoading = false;
        }).catch(()=>{
            this.tableLoading = false;
        })
      },

      /**
       * 分页大小改变
       * @param pageSize 分页大小
       */
      sizeChange(pageSize) {
        this.page.pageSize = pageSize;
        this.page.currentPage = 1;
        this.getList();
      },
      /**
       * 当前页改变
       * @param current 当前页
       */
      currentChange(current) {
        this.page.currentPage = current;
        this.getList();
      },
      /**
       * 搜索
       * @param form 查询条件
       * @param done 完成回调
       */
      searchChange(form, done) {
        this.searchForm = form;
        this.page.currentPage = 1;
        this.getList();
        done();
      },
      /**
       * 刷新
       */
      refreshChange() {
        this.getList();
      },
    }
  }
</script>

<style scoped>

</style>
